package thread;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 刘远望
 * Date: 2025-06-05
 * Time: 20:19
 */
//callable接口的作用是定义一个函数，该函数可以返回一个值(重点)，并且该函数可以抛出异常。
//FutureTask类是Future接口的实现类，它可以包装一个callable接口的实例，并提供一个get()方法来获取callable接口的返回值。
public class Demo39 {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        Callable<Integer> callable = () -> {
            int sum = 0;
            for (int i = 1; i <= 100; i++) {
                sum += i;
            }
            return sum;
        };
        FutureTask<Integer> futureTask = new FutureTask<>(callable);

        Thread thread = new Thread(futureTask);
        thread.start();

        //get操作是获取到callable接口的返回值，如果callable接口抛出异常，则会在get()方法中抛出ExecutionException。
        //get可能会阻塞线程，直到callable接口的返回值或异常出现。
        //如果该线程没执行完毕就会一直阻塞
        System.out.println(futureTask.get());
    }

}
